• 问题

    高并发程序既很难保证线程安全的问题,而且一旦出现问题之后,也很难排错和分析出来原因。而j.u.c包中提供了很多线程安全的工具,应该在实际开发中多使用这些性能已经得到了验证的工具,这使得我们的开发能够十分方便又能保证我们代码的稳定性。常用的并发工具有哪些?

  • 答案

    j.u.c包下的并发工具分为三类:1.负责管理线程的executor框架;2.并发集合;3.同步器。其中,负责管理线程的executor在第68条已经说过,不再单独描述。

    1. 并发集合:并发集合针对标准的集合接口(如List、Queue和Map)做了进一步的处理,提供了高性能的并发实现,常用的有CourrentHashMap,它就扩展了Map接口并保证了线程安全。另外,BlockingQueue实现了可阻塞的操作,即当队列为空的时候,会阻塞“取数据”线程,直至队列不为空位置,当队列满时,会阻塞“插入数据”的线程,直至队列未满。BlockingQueue被广泛的应用在“生产者-消费者”中;
    2. 同步器:同步器能够完成线程之间的协调,最常用的有CountdownLatch和Semaphore,较不常用的有CyclicBarrier和Exechanger。
  • 结论

    j.u.c包下跟我们提供了多种保证线程安全的数据结构,在实际开发中应该使用这些性能和安全性已经得到保证的工具,而不是重复造轮子,并且很难保证安全性。比如,在之前的代码中“生产者-消费者”使用wait和notify的方式去实现,代码就很难维护,如果使用可阻塞操作的BlockingQueue代码更加简洁,逻辑也更加清晰。

results matching ""

    No results matching ""